#include "sbi.h"
#include "mmio.h"

// CLINT寄存器地址定义
#define CLINT_BASE 0x2000000
#define CLINT_MTIME (CLINT_BASE + 0xBFF8)
#define CLINT_MTIMECMP(hart) (CLINT_BASE + 0x4000 + 8*(hart))

// 设置下次时钟中断时间
void sbi_set_timer(uint64_t stime_value) {
    // 在M模式下直接写CLINT的mtimecmp寄存器
    // 当mtime >= mtimecmp时触发时钟中断
    mmio_write64(CLINT_MTIMECMP(0), stime_value);
}

// 获取当前时间
uint64_t get_time(void) {
    // 读取CLINT的mtime寄存器(全局时间计数器)
    return mmio_read64(CLINT_MTIME);
}

